package org.example;


import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentSplitter;
import dev.langchain4j.data.segment.TextSegment;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义文档分割器，用于将文档按照指定规则分割成多个文本段
 */
public class MyDocumentSplitter implements DocumentSplitter {

    /**
     * 文档分割的正则表达式，用于匹配两个换行符之间的空白字符
     * 分割规则：这个正则表达式用于匹配两个连续换行符之间的空白字符，通常用于：
     *  用于分割文本段落
     *      String text = "第一段内容\n\n第二段内容\n\n第三段内容";
     *      String[] paragraphs = text.split(SPLIT_EXP);
     *      结果: ["第一段内容", "第二段内容", "第三段内容"]
     */
    public static final String SPLIT_EXP="\\s*\\R\\s*\\R\\s*";

    /**
     * 将文档按照预定义的分割规则分割成多个文本段
     *
     * @param document 需要分割的文档对象，包含待分割的文本内容
     * @return 包含分割后文本段的列表，每个文本段都是原文档的一部分
     */
    @Override
    public List<TextSegment> split(Document document) {
        List<TextSegment> segments = new ArrayList<>();
        // 使用正则表达式分割文档文本
        String[] parts = document.text().split(SPLIT_EXP);
        // 将分割后的每个部分转换为TextSegment并添加到结果列表中
        for (String part : parts) {
            segments.add(TextSegment.from(part));
        }
        return segments;
    }
}

